package jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
 * JDBC中的事务控制
 */

public class JDBCDemo11 {
    public static void main(String[] args) {
        //需求：向表中插入一条记录
        try (Connection connection = DBUtil.getConnection();){
            //通过Connection来控制事务
            connection.setAutoCommit(false);//关闭自动提交
            String sql = "INSERT INTO userinfo(username,password,nickname,age)"+
                    "VALUES(?,?,?,?)";
            PreparedStatement  ps = connection.prepareStatement(sql);
            ps.setString(1,"admin");
            ps.setString(2,"123456");
            ps.setString(3,"管理员");
            ps.setInt(4,18);
            int num = ps.executeUpdate();
            System.out.println(num>0?"添加成功":"添加失败");

            //实际开发中后面还有当前业务的其他流程需要继续执行
            /*
                无论我们调用的是commit还是rollback都会导致本次事务结束。
             */
            connection.commit();//提交事务
            System.out.println("事务提交了!");

//            connection.rollback();//回滚事务
//            System.out.println("事务回滚了!");

            //如果下面有开始执行新的DML操作时，则会开启一个新的事务。。。

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
